
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>DJL-NDArray介绍 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>DJL-NDArray介绍 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在 DJL 框架中，`NDArray` 的核心定义和作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在 DJL 中，`NDArray` 是一个核心组件，代表 N 维数组 (N-Dimensional Array)。它是存储和操作数据的基本单位，类似于 NumPy 的 `ndarray` 或 TensorFlow/PyTorch 的张量，通常用于存储模型的输入、输出以及中间计算结果。</div>
          </div>
          <div class="card-source">来源: 什么是 DJL 中的 NDArray？</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">与普通的 Java 数组相比，DJL 的 `NDArray` 具备哪些显著的优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">与普通数组相比，`NDArray` 的主要优势有三点：1. 支持 GPU 加速，计算速度更快；2. 能够无缝对接深度学习模型，方便用于模型训练或推理；3. 提供了许多高效的数学和线性代数操作，无需开发者手动实现复杂逻辑。</div>
          </div>
          <div class="card-source">来源: 通俗解释</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">根据文档，`NDArray` 在深度学习应用中有哪些常见用途？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">NDArray 的常见用途包括：1. 存储输入输出数据（如图片、文本）；2. 进行数值运算（如计算损失、更新权重）；3. 作为模型的中间计算结果（如卷积网络中某一层的输出）。</div>
          </div>
          <div class="card-source">来源: NDArray 的常见用途</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在 DJL 中，需要使用哪个管理类来创建 `NDArray`？请描述基本创建流程。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在 DJL 中，需要使用 `NDManager` 来管理和创建 `NDArray`。基本流程是先通过 `NDManager.newBaseManager()` 创建一个管理器实例，然后调用其 `create()` 方法来生成 `NDArray` 对象。</div>
          </div>
          <div class="card-source">来源: NDArray 的常用操作</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中演示了如何对两个 `NDArray` 进行矩阵乘法？使用了哪个具体方法？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中演示了使用 `.matMul()` 方法来执行两个 `NDArray` 之间的矩阵乘法运算。例如：`NDArray product = matrix1.matMul(matrix2);`。</div>
          </div>
          <div class="card-source">来源: NDArray 的常用操作</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">如何将一个图像文件转换为 `NDArray` 并对其进行归一化处理？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">首先使用 `ImageFactory` 从文件加载图片，然后通过 `img.toNDArray(manager)` 方法将其转换为 `NDArray`，最后调用 `.div(255)` 方法将像素值归一化。</div>
          </div>
          <div class="card-source">来源: 实战示例：矩阵加法和图片归一化</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在 `NDArray` 这个术语中，字母 'N' 具体代表什么含义？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">'N' 代表维度（Dimension）。例如，一张图片可以看成一个 3 维数组，包含了高、宽、通道这三个维度。</div>
          </div>
          <div class="card-source">来源: 通俗解释</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何改变一个 `NDArray` 的维度或形状？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以使用 `reshape()` 方法来改变 `NDArray` 的维度。例如，`array.reshape(1, 5)` 可以将一个一维数组转换为一个形状为 (1, 5) 的二维数组。</div>
          </div>
          <div class="card-source">来源: NDArray 的常用操作</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">除了矩阵乘法，`NDArray` 还支持哪些基础的数学运算？请举例说明。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`NDArray` 支持基础的数学运算，例如加法。文档中的示例为 `NDArray sum = array1.add(array2);`，它将两个 `NDArray` 逐元素相加。</div>
          </div>
          <div class="card-source">来源: NDArray 的常用操作</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
